Welcome to pandas!

8.3 更强的列方向转到行方向(单层索引)

学习的df.stack()函数是指定整个列索引层级的数据转换方向,这种方式太过一刀切,不够灵活。因此Pandas提供了一种能指定具体列做转换的函数,分别是pd.melt()和df.melt()

函数,结构如下:

pd.melt(frame,id_vars=None,value_vars=None,var_name=None,value_name=”value",col_level=None,ignore_index=True)

id_vars:指定固定在列方向的列标签,可以是字符串,元组,列表,数组;

value_vars:指定要转换到行方向的列标签,如果没指定,则全部转换;

var_name:对列标签转换成数据的的列命名,默认名称是variable;

value_name:对被转换的列数据转换成数据的列命名,默认名称是value;

col_level:如果列是公层索引,则可以对指定层级标签的列进行转换,此标签必须保持唯一性;

ingore_index:行索引序号是否重新编号,默认为True,表示需要重新编号。

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\1.8.03 更强的列方向转到行方向(单层索引).xlsx" )

#导入时不需指定索引

print (df)

t=df.melt(id_vars=( "姓名","性别" ),

value_vars= "语文" ,

var_name= "科目" ,

value_name= "分数"

)

print (t)

返回:

姓名 性别 语文 数学
0 张三 71 63
1 李四 95 88
2 王麻子 77 100

姓名 性别 科目 分数
0 张三 语文 71
1 李四 语文 95
2 王麻子 语文 77